package com.atguigu.mobileplayer4;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;

/**
 * 作者：杨光福 on 2016/5/21 15:16
 * 微信：yangguangfu520
 * QQ号：541433511
 * 作用：系统播放器
 *
 *
 * VideoView videoView = findViewById(R.id.video_view);
 * Uri uri = Uri.parse("视频源地址"); // 可以是本地路径、网络 URL 或 content URI
 * videoView.setVideoURI(uri);
 * videoView.start(); // 开始播放
 */
public class SystemVideoPlayer extends Activity {
    private VideoView videoview;
    private Uri uri;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //  VideoView 是一个用于播放视频的组件
        setContentView(R.layout.activity_system_video_player);
        videoview = (VideoView) findViewById(R.id.videoview);
        //getIntent().getData() 是一个用于获取启动当前 Activity 的 Intent 中携带的 数据 URI 的方法。
        // 这个方法在处理外部链接、文件共享或内容传递时非常有用
        uri = getIntent().getData();
        //
         videoview.setVideoURI(uri);


        /****
         * 用于监听视频准备完成事件。由于视频加载是异步过程，在视频真正可播放之前需要一定时间准备（如缓冲、解码）。
         * 通过设置此监听器，可在视频准备就绪后立即执行播放或其他操作
         */
        videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
               // 视频准备完成后执行的代码
                // mp 是底层的 MediaPlayer 对象，可用于高级控制
                videoview.start();//开始播放
            }
        });
        /****
         *   设置播放错误监听器
          */
        videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            /***
             *
             * @param mp
             * @param what  错误类型常量
             * @param extra  额外错误代码（取决于错误类型）
             * @return
             */
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Toast.makeText(SystemVideoPlayer.this, "播放出错了", Toast.LENGTH_SHORT).show();
                return true;  // 返回 true 表示已处理错误，不再调用系统默认处理
            }
        });


        /****
         * 用于监听视频播放完成事件。当视频自然播放到末尾时，系统会触发该监听器，允许开发者执行后续操作（如播放下一个视频、显示重播按钮、返回主页等）。
         */
        videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

            //视频播放完成后执行的代码
            @Override
            public void onCompletion(MediaPlayer mp) {
                Toast.makeText(SystemVideoPlayer.this, "播放完成", Toast.LENGTH_SHORT).show();
                finish();

            }
        });


        /***
         * 设置控制面板
         * VideoView.setMediaController() 是一个用于为视频播放添加控制界面的方法。通过设置 MediaController，
         * 可以快速实现包含播放 / 暂停、进度条、音量调节、全屏等功能的标准控制栏，提升用户体验
         */
        videoview.setMediaController(new MediaController(this));

    }
}
